package com.littleHan.brushQuestions.web.userCenter.dao;

import com.littleHan.brushQuestions.web.start.pojo.*;
import com.littleHan.brushQuestions.web.userCenter.pojo.Announcement;
import com.littleHan.brushQuestions.web.userCenter.pojo.DicType;
import com.littleHan.brushQuestions.web.userCenter.pojo.vo.SearchVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

public interface AdminUserCenterDao {

    /**
     * 获取普通用户列表
     * @param pageNo 第几个开始
     * @param pageSize 显示几个
     * @return
     */
    List<GeneralUser> getGeneralUserList(@Param("pageNo")int pageNo,@Param("pageSize") int pageSize);

    /**
     * 获取普通用户的数量
     * @return 数量
     */
    int getGeneralUserNum();

    /**
     * 修改用户的状态(封禁和未封禁)
     * @param id 普通用户id
     * @param violation 封禁值
     * @return
     */
    int updateGeneralUserViolation(@Param("id")String id,@Param("violation") String violation);

    /**
     * 获取权限列表
     * @return
     */
    List<Role> getRoleList();

    /**
     * 获取当前用户的所有角色(权限)
     * @param id 普通用户id
     * @return
     */
    List<String> getGeneralUserRole(@Param("id") String id);

    /**
     * 根据userId删除用户的权限
     * @param userId
     * @return
     */
    int deleteUserRoleByUserId(String userId);

    /**
     * 插入用户权限
     * @param userRole 用户权限
     * @return
     */
    int insertUserRole(UserRole userRole);

    /**
     * 获取拥有审核员权限的普通用户
     * @param pageNo 第几个开始
     * @param pageSize 显示几个
     * @return
     */
    List<GeneralUser> getAuditorList(@Param("pageNo")int pageNo,@Param("pageSize") int pageSize);

    /**
     * 获取拥有审核员权限的普通用户的总数
     * @return
     */
    int getAuditorNum();


    List<GeneralUser> searchGeneralUser(@Param("searchVo") SearchVo searchVo);

    /**
     * 根据搜索条件获取结果总数量
     * @param searchVo
     * @return
     */
    int searchGeneralUserNum(@Param("searchVo") SearchVo searchVo);

    /**
     * 获取数据字典中题的值具有分页
     * @param pageNo
     * @param pageSize
     * @return
     */
    List<DicValue> getDicValue(@Param("pageNo")int pageNo,@Param("pageSize") int pageSize,@Param("value")String value);

    /**
     * 获取数据字典中题的值的数量
     * @return
     */
    int getDicValueNum(@Param("value")String value);

    /**
     * 修改数据字典值
     * @param dicValue 数据字典值对象
     * @return
     */
    int updateDicValue(DicValue dicValue);

    /**
     * 查找题目中有没有该类型(科目、难度等级、类型)的题目
     * @param id tbl_dic_value的id
     * @return
     */
    int selectIsHaveDicValue(String id);

    /**
     * 删除数据字典的值，根据数据字典值id
     * @param id 数据字典值id
     * @return
     */
    int deleteDicValue(String id);

    /**
     * 获取数据字典类型列表
     * @return
     */
    List<DicType> getDicTypeList();

    /**
     * 添加数据字典值
     * @param dicValue 数据字典对象
     * @return
     */
    int addDicValue(@RequestBody DicValue dicValue);

    /**
     * 获取公告信息
     * @param pageNo 第几个开始
     * @param pageSize 显示几个
     * @return
     */
    List<Announcement> getAnnouncementList(@Param("pageNo")int pageNo,@Param("pageSize") int pageSize);

    /**
     * 获取公告总数量
     * @return
     */
    int getAnnouncementListNum();

    /**
     * 根据公告的id删除公告信息
     * @param id 公告id
     * @return
     */
    int deleteAnnouncement(String id);

    /**
     * 添加公告
     * @param announcement 公告实例
     * @return
     */
    int addAnnouncement(Announcement announcement);

}
